package com.ruoyi.central.domain;

import com.baomidou.mybatisplus.annotation.*;
import com.ruoyi.common.enums.common.TaskStatusEnum;
import com.ruoyi.common.validation.group.InsertGroup;
import com.ruoyi.common.validation.group.UpdateGroup;
import lombok.Data;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Length;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import com.ruoyi.common.core.domain.BaseEntity;

import java.util.List;

/**
 * 工艺流程执行对象 top_central_art_process_run
 *
 * @author ruoyi
 * @date 2022-03-02
 */
@Data
@TableName("top_central_art_process_run")
public class TopCentralArtProcessRun extends BaseEntity{

    private static final long serialVersionUID = 1L;

    public TopCentralArtProcessRun() {
    }
    /** 编号 */
    @TableId
    @Length(min = 0,max = 10,message="编号 数据长度不能大于 10")
    private Integer id;

    /** 工艺名称*/
    //TODO 在数据库加入字段
    @NotEmpty(groups = {InsertGroup.class,UpdateGroup.class},message = "工艺名称不能为空")
    private String name;

    /** 产品批次号 */
    @Excel(name = "产品批次号")
    @Length(min = 0,max = 255,message="产品批次号 数据长度不能大于 255")
    private String prodBatchNo;

    /** 产品编号 */
    //TODO 修改数据库类型
    @Excel(name = "产品编号")
    @NotEmpty(groups = {InsertGroup.class,UpdateGroup.class},message = "产品编号不能为空")
    @Length(min = 0,max = 50,message="产品编号 数据长度不能大于 50")
    private String prodId;

    /** 工艺流程编号 */
    @Excel(name = "工艺流程编号")
    @NotNull(groups = {InsertGroup.class,UpdateGroup.class},message = "工艺流程编号不能为空")
    @Length(min = 0,max = 10,message="工艺流程编号 数据长度不能大于 10")
    private Integer artProcessId;

    @TableField(exist = false)
    private TopCentralArtProcess artProcess;

    /** 工序 */
    @Excel(name = "执行工序编号")
    @NotNull(groups = {InsertGroup.class,UpdateGroup.class},message = "执行工序编号不能为空")
    @Length(min = 0,max = 10,message="工序 数据长度不能大于 10")
    private Integer processStepId;

    /** 执行工序对象 **/
    @TableField(exist = false)
    public TopCentralProcessStepRun processStepRun;

    @TableField(exist = false)
    public List<TopCentralProcessStepRun> processStepRuns;
    /** 加工状态 */
    @Excel(name = "加工状态")
    @NotNull(groups = {InsertGroup.class,UpdateGroup.class},message = "加工状态不能为空")
    @Length(min = 0,max = 1,message="加工状态 数据长度不能大于 1")
    private TaskStatusEnum taskStatus;

    /** 1未删除标记 */
    @TableLogic //逻辑删除标记注解
    @Length(min = 0,max = 1,message="1未删除标记 数据长度不能大于 1")
    private Integer delFlag;

    /** 创建者 */
    @Excel(name = "创建者")
    @Length(min=0,max=255,message="创建者 数据长度不能大于 255")
    @TableField(fill = FieldFill.INSERT)
    private String createBy;

    /** 修改者 */
    @Excel(name = "修改者")
    @Length(min=0,max=255,message="修改者 数据长度不能大于 255")
    @TableField(fill = FieldFill.UPDATE)
    private String updateBy;

    /** 描述 */
    @Excel(name = "描述")
    @Length(min=0,max=255,message="描述 数据长度不能大于 255")
    private String remark;

    /** 当前执行工艺的物料对象 */
    @TableField(exist = false)
    private TopCentralMaterial material;

    public static TopCentralArtProcessRun build(TopCentralArtProcess artProcess,TopCentralMaterial material) {
        TopCentralArtProcessRun artProcessRun = new TopCentralArtProcessRun();
        artProcessRun.setArtProcessId(artProcess.getId());
        artProcessRun.setName(artProcess.getName());
        artProcessRun.setProdBatchNo(material.getBatchNo());
        artProcessRun.setProdId(material.getId());

        return artProcessRun;
    }
}
